home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d13
/
pcrjan89.arc
/
KEYCODE.ASM
< prev
next >
Wrap
Assembly Source File
|
1990-03-21
|
2KB
|
109 lines
comment |
This short program displays the full scan code for each key pressed
in ASCII/Hex notation. Press ESC to end the program.
Written for MASM 5.1 (should compile with earlier versions).
Save as KEYCODE.ASM
Compile: MASM KEYCODE;
LINK KEYCODE;
|
stack segment stack
db 100h dup (?)
stack ends
data segment
hextable db "0123456789ABCDEF"
data ends
code segment
assume cs:code, ds:data, es:nothing, ss:stack
;---------
; Pick the definition
; that applies to your
; computer
;---------
KEY_IN equ 00h ;For older keyboards
;KEY_IN equ 10h ;For "enhanced" keyboards (101/102 keys)
;---------
; Program starts here
;---------
begin: mov ax,seg data ;Initialize DS
mov ds,ax
call cls ;Clear the screen
lp: mov ah,KEY_IN ;Wait for keystroke
int 16h ; returned by BIOS
push ax ;Save the key
call display ;Display the scan code
pop ax ;Recover original key
cmp al,01bh ;Was it ESC?
jnz lp ;No -- loop back
mov ax,4c00h ;Else exit to DOS
int 21h
;---------
; Simple and sloppy
; screen-clear routine
;---------
cls proc near
mov ax,3 ;Set mode 3 (use 7 for monochrome)
int 10h ;Call Video BIOS
ret
cls endp
;---------
; Display the value
; in AX in hex notation
; by moving each byte into AL
; and calling print_al twice
;---------
display proc near ;Display AX value in hex
push ax ;Save keycode
mov ah,02 ;Set cursor position
mov dx,0 ;Top-left corner
mov bh,0 ;Use page 0
int 10h ;Call the video BIOS
pop ax ;Recover original keycode
disp_2: push ax ;Save keycode again
mov al,ah ;Move high byte into AL
call print_al ;Print value in AL
pop ax ;Recover keycode
call print_al ;Print low byte
ret
display endp
;---------
; Display the value in AL
; in hex format
;---------
print_al proc near
mov bx,offset hextable ;DS:BX ==> translation table
cbw ;AH = 0
push ax ;Save the byte
mov cl,4 ;Shift top nibble in AL
shr al,cl ; to the bottom
xlat ;Get hex character
mov ah,0eh ;Video service: print TTY mode
int 10h ;Print the character
pop ax ;Recover the byte
and al,0fh ;Mask out high nibble
xlat ;Translate low nibble to hex
mov ah,0eh ;And print it
int 10h ; with a BIOS call
mov al,' ' ;Now print a space
int 10h ; with a BIOS call
ret
print_al endp
code ends
end begin